﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _009_面对对象
{
    class Program
    {
        public class Person
        {
            public string name;
            public int age;

            //虚方法
            public  virtual void Speak(string sth)
            {
                Console.WriteLine(sth);
            }
        }
        //子类
        public class Student : Person
        {
            //重写虚方法
            public override void Speak(string sth)
            {
                Console.WriteLine("清嗓子");
                base.Speak(sth);
            }
        }

        //定义一个接口
        public interface IEengine
        {
            //预热
            void WarnUP();

        }


        //交通工具 抽象类
        public abstract class Vehicle
        {
            //非抽象方法
            public void GetOn()
            {
                Start();
                Console.WriteLine("坐上交通工具");
            }

            //抽象方法 子类必须要实现
            public abstract void Start();
        }

        //汽车类
        //这是接口的一种实现
        public class Car : Vehicle,IEengine
        {
            //子类必须实现抽象方法
            public override void Start()
            {
                Console.WriteLine("启动车子");
            }

            //实现预热的接口
            void IEengine.WarnUP()
            {
                Console.WriteLine("预热车子");
            }
        }

        //预热引擎
        public void WarnUpEngine(IEengine engine)
        {
            engine.WarnUP();
        }

        static void Main(string[] args)
        {
            //虚方法实例化
            /*Person person = new Person();
            Student student = new Student();
            person.Speak("xubon");
            student.Speak("hhhh");
            */

            //抽象方法使用
            Car car = new Car();
            car.GetOn();

            //接口的实例化
            IEengine engine = new Car();
            engine.WarnUP();

            Console.ReadKey();
        }
    }
}
